package com.qimo.zuoyeoa.controller;


import com.qimo.zuoyeoa.entity.User;
import com.qimo.zuoyeoa.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpSession;

/**
 * 登录验证控制器
 */
@Controller
public class LoginController {

    @Autowired
    private UserService userService;

    @GetMapping("/login")
    public ModelAndView loginView() {
        ModelAndView mav = new ModelAndView("login");
        return mav;
    }

    @PostMapping("/login")
    public ModelAndView login(
            @RequestParam(name = "name", required = true, defaultValue = "") String username,
            @RequestParam(name = "password", required = true, defaultValue = "") String password,
            HttpSession session
    ){
        // 创建一个MAV，假设正确登录，则重定到主页
        ModelAndView mav = new ModelAndView("redirect:/index");

        // 验证用户名密码是否存在，如果存在，则返回一个封装了登录用户信息的对象。
        User user = userService.findByNamePass(username,password);
        if (user != null){
            // 如果登录用户存在，则登录成功。然后，将该用户的信息保存在会话对象中，以便在整个操作过程中，都能够访问到登录用户信息。
            session.setAttribute("user",user);

        }else {
            // 如果没有找到该用户，则重定向登录页面
            mav.setViewName("redirect:/login");
        }
        return mav;
    }

    @GetMapping("/logout")
    public ModelAndView logout(HttpSession session, SessionStatus sessionStatus){
        ModelAndView mav = new ModelAndView("redirect:/login");
        // 退出登录：核心是要清空当前请求的会话对象,并讲会话对象作废
        session.removeAttribute("user");
        session.invalidate();
        // 调用了Spring框架的会话状态管理，结束会话
        sessionStatus.setComplete();
        return mav;
    }
}
